//package com.yuner.yunMall.utils;
//
//import com.alibaba.fastjson.JSONObject;
//import com.netflix.zuul.context.RequestContext;
//import com.netflix.zuul.http.ServletInputStreamWrapper;
//
//import javax.servlet.ServletInputStream;
//import javax.servlet.http.HttpServletRequest;
//import javax.servlet.http.HttpServletRequestWrapper;
//import java.io.IOException;
//
///**
// * @Company AAA软件教育
// * @Author Seven Lee
// * @Date Create in 2020/7/28 16:35
// * @Description
// *      发送数据到达controller
// *      并不是只适用于路由，只要是过滤器都可以使用
// **/
//public class SendParams2ControllerUtils {
//
//    private SendParams2ControllerUtils() {
//
//    }
//
//    /**
//     * @author Seven Lee
//     * @description
//     *      发送数据的方法
//     * @param [jsonObject, rcx, request]
//     * @date 2020/7/28
//     * @return void
//     * @throws
//    **/
//    public static void sendParams(JSONObject jsonObject, RequestContext rcx, HttpServletRequest request) {
//        String body = jsonObject.toString();
//        final byte[] bytes = body.getBytes();
//        rcx.setRequest(new HttpServletRequestWrapper(request){
//            /**
//             * @author Seven Lee
//             * @description
//             *      获取输入流对象
//             *      并且把二进制参数传递给该输入流
//             *      让其跟着这个输入流一起传递到目标路径(/doLogin)
//             * @param []
//             * @date 2020/7/28
//             * @return javax.servlet.ServletInputStream
//             * @throws
//            **/
//            @Override
//            public ServletInputStream getInputStream() throws IOException {
//                return new ServletInputStreamWrapper(bytes);
//            }
//
//            /**
//             * @author Seven Lee
//             * @description
//             *      下面的两个方法都是获取参数的长度
//             *      只是单位不一样(int, long)
//             *      重写这两个方法的意义就是实现request(post)的分段传递
//             *      假设:
//             *          现在参数非常长
//             *          request无论是post还是get都是有传输长度上限的
//             *          getContentLength()--->假设已经占用长度完毕，参数没有传递完
//             *          getContentLengthLong()--->就会继续执行下面的方法继续传输
//             *          eg:
//             *            123456789
//             *            getContentLength()--->6位(123456)
//             *            getContentLengthLong()--->11位(123456789)
//             *              ---->先传递123,456,789
//             * @param []
//             * @date 2020/7/28
//             * @return int
//             * @throws
//            **/
//            @Override
//            public int getContentLength() {
//                return bytes.length;
//            }
//
//            @Override
//            public long getContentLengthLong() {
//                return bytes.length;
//            }
//        });
//    }
//
//}
